#include "cJSON/cJSON.h"
#include "log/log.h"
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    char *n = "tom";
    int a = 12;


    // 1. 生成json字符串   {"name":"tom","age":12}
    // 创建一个空的cJSON对象
    cJSON *root_obj = cJSON_CreateObject();
    if (root_obj== NULL) {
        log_error("创建cJSON对象失败");
        return -1;
    }
    // 添加name和age两项
    cJSON_AddStringToObject(root_obj, "name", n);
    cJSON_AddNumberToObject(root_obj, "age", a);

    // 生成json字符串
    char * json = cJSON_PrintUnformatted(root_obj);
    log_debug("生成json: %s", json);

    // 2. 解析json字符串
    cJSON *root_obj2 = cJSON_Parse(json);  // {"name":"tom","age":12}
    if (root_obj2 == NULL) {
        log_error("解析json字符串失败");
        return -1;
    }
    cJSON * nameObj = cJSON_GetObjectItem(root_obj2, "name"); // "name":"tom"
    cJSON * ageObj = cJSON_GetObjectItem(root_obj2, "age"); // "age":12
    if (nameObj == NULL || ageObj == NULL) {
        log_error("json中没有name或age字段");
        return -1;
    }
    char *name = nameObj->valuestring;
    int age = ageObj->valueint;
    log_debug("解析json: name=%s, age=%d", name, age);

    // 3. 释放内存
    cJSON_Delete(root_obj);
    cJSON_Delete(root_obj2);
    // cJSON的print生成的json字符串需要手动释放free
    free(json);
    
    return 0;
}
